package com.neutech.variable;

import java.util.Scanner;

/**
 * @author Neuedu-远哥
 * @version 1.0
 * @date 2021/11/10 14:07
 */
public class En13 {
    public static void main(String[] args) {
        En13 en13 = new En13();
        Scanner sc = new Scanner(System.in);
        // 提示性语句
        System.out.println("请输入12位条形码:");
        String inputCode = sc.nextLine();

        if (inputCode.length() != 12) {
            System.out.println("位数不正确，请重新输入12位有效条形码！");
            return;
        }
        String str = en13.generateCode(inputCode);
        System.out.println("最终的条形码为：" + str);
    }

    /**
     * 根据输入的源12位条形码生成最后一位校验位
     *
     * @param originCode 12位条形码
     * @return 带有最后一位校验位的13位条形码
     */
    public String generateCode(String originCode) {
        String generateCode = originCode;
        int temp;
        int oddSum = 0;
        int evenSum = 0;
        // 加上校验位
        // 第 1 步：取出该数的奇数位和，c1 = 6 + 2 + 1 + 8 + 1 + 2 = 20
        // 第 2 步：取出该数的偶数位和，c2 = 9 + 1 + 6 + 5 + 1 + 8 = 30
        // 6 9 2 1 1 6 8 5 1 1 2 8
        for (int i = 0; i < originCode.length(); i++) {
            if (i % 2 != 1) {
                // 取到所有奇数位，并转换成为数
                int odd = originCode.charAt(i) - '0';
                oddSum += odd;
            } else {
                // 取到所有偶数位，并转换成为数
                int even = originCode.charAt(i) - '0';
                evenSum += even;
            }
        }
        // 第 3 步：将"奇数和"与"偶数和的三倍"相加，cc = c1+c2*3 = 20 + 30 * 3 = 110
        temp = oddSum + evenSum * 3;
        // 第 4 步：取结果（对 10 取余）：（110%10=0）
        temp = temp % 10;
        // 第 5 步：用 10 减去这个值（110%10=0）：10 - 0 = 10
        temp = 10 - temp;
        // 第 6 步：对得到的数（10）再对（对 10 取余）：10%10=0
        temp = temp % 10;
        return generateCode + temp;
    }
}
